<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    // Object.defineProperty
    // 作用：更精细地定义对象的属性

    // 1. 粗放的方式来定义对象的属性
    var obj = {}
    obj.d = 100
    // console.log(obj.abc, obj.d)
    // 2. Object.defineProperty来定义
    //  格式：
    //  Object.defineProperty(对象，属性名,{
    //     属性描述符，对参数2表示的属性的说明
    //  })

    // (1) 给obj添加新属性
    Object.defineProperty(obj, 'a', {
      configurable: true,
      value: 200
    })
    // (2) 修改属性
    Object.defineProperty(obj, 'a', {
      configurable: true,
      value: 100
    })
    console.log(obj) // {d: 100, a: 200}
    obj.a = 1 // 无法修改a的属性值
    obj.d = 1
    console.log(obj) //  {d: 1, a: 200}

    // 获取对象的属性的具体的描述
    console.log(Object.getOwnPropertyDescriptor(obj, 'a'))
    console.log(Object.getOwnPropertyDescriptor(obj, 'd'))


  </script>
</body>
</html>